package util;
import javax.naming.*;
import javax.sql.*;

import java.io.Serializable;
import java.sql.*;

public class UtilBDD implements Serializable  {

	private static final long serialVersionUID = -6817770320743796848L;

	private Connection conn1;

	private Connection conn2;

	private DataSource ds1;

	public void init()
	{
		try
		{
			//System.out.println("------OVS------");
			//System.out.println("Initialisation d'une connexion");
			//System.out.println("------------------------");

			Context ctx = new InitialContext();

			ds1 = (DataSource)ctx.lookup("java:comp/env/jdbc/dsOVSWebApp");
			

			if (ds1 != null)
			{
				conn1 = ds1.getConnection();
				//System.out.println("CONNEXION BDD OK  !!! \n");
			}

		 
		}
		catch(Exception e)
		{
			System.out.println("\nErreur lors de l'execution de Ovs Web App SQL SERVER :");
			e.printStackTrace();
			System.out.println("\n");
		}
	}

	public void close()
	{
		//System.out.println("------OVS------");
		//System.out.println("Fermeture d'une connexion");
		//System.out.println("------------------------");

		 try
		 {
			 conn1.close();
			 conn2.close();
		 }
		 catch (Exception e)
		 {
			 // Ignorer
		 }
	 }

	public void setAutocommit(boolean test)throws SQLException
	{
		if (test)
		{
			conn1.setAutoCommit(true);
		}
		else
		{
			conn1.setAutoCommit(false);
		}
	}

	public void commit()throws SQLException
	{
		conn1.commit();
	}

	public void rollback()throws SQLException
	{
		conn1.rollback();
	}

	public ResultSet ExecuteSelect(int con,String Req) throws SQLException
	 {
		ResultSet rs = null;
		Statement stmt = null;
		if (con == 1)
		{
			stmt = conn1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		}
		else if (con == 2)
		{
			stmt = conn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		}
	    rs = stmt.executeQuery(Req);
		return rs;
	 }

	public void ExecuteInsert(String Req) throws SQLException
	 {
		 Statement stmt = conn1.createStatement();
		 stmt.executeUpdate(Req);
	 }


	/**
	 * 	 Retourne une chaine déstinée à remplir  les options d'un select (HTML):
	 * - req : requete à exec
	 * - value : Valeur de l'option
	 * - affich : affichage
	 * - tri : première option (ou null) a apparaitre ( le test est effectué sur la colonne value )
	 * - premLigneNull : Initialise un premier SELECT blanc n'ayant aucune valeur
	 * - checked : option checkée ( le test est effectué sur la colonne value )
	 * @return String
	 */
	public String ReturnOptions(int con, String req, String value, String affich, String tri, boolean premLigneNull, String checked) throws SQLException
	 {

		ResultSet rs = null;

		if (con == 1)
		{
			rs = ExecuteSelect(1,req);
		}
		else if (con == 2)
		{
			rs = ExecuteSelect(2,req);
		}

		 String retour = null;
		 if (checked == null)
		 {
			 checked = "checkedapourvaleurnull";
		 }

		 if (!checked.equals("checkedapourvaleurnull"))
		 {
			 tri = null;
		 }

		 if(premLigneNull && checked.equals("checkedapourvaleurnull"))
		 {
			 retour = "<option value=\"\"></option>";
		 }
		 else
		 {
			 retour = "";
		 }

		 if (tri == null)
		 {
			 if (rs.next())
			 {
				 rs.beforeFirst();
				 while (rs.next())
				 {
					 if(rs.getString(value).equals(checked))
					 {
					 	retour += "<option value=\""+rs.getString(value)+"\" selected='selected' >"+ rs.getString(affich) +"</option>";
					 }
					 else
					 {
						 retour += "<option value=\""+rs.getString(value)+"\">"+ rs.getString(affich) +"</option>";
					 }
				 }
			 }
		 }
		 else
		 {
			 boolean test = false;
			 if (rs.next())
			 {
				 rs.beforeFirst();
				 while (rs.next() &&  !test )
				 {
					 if (rs.getString(value).equals(tri))
					 {
						retour += "<option value=\""+rs.getString(value)+"\">"+ rs.getString(affich) +"</option>";
					 	test=true;
					 }
				 }
				 rs.beforeFirst();
				 while (rs.next())
				 {
					 if (!rs.getString(value).equals(tri))
					 {
						 retour += "<option value=\""+rs.getString(value)+"\">"+ rs.getString(affich) +"</option>";
					 }
				 }
			 }
		 }

		 // Fermeture du rs
		 rs.close();

		 return retour;
	 }

}
